package com.qing.design.patterns.prototype.example.shapes;

import java.util.Objects;

/**
 * 具体原型。克隆方法会创建一个新对象并将其传递给构造函数。直到构造函数运
 * // 行完成前，它都拥有指向新克隆对象的引用。因此，任何人都无法访问未完全生
 * // 成的克隆对象。这可以保持克隆结果的一致。
 * 矩形
 */
public class Rectangle extends  Shape {


	public int width;

	public  int height;

	public Rectangle() {
	}

	public Rectangle(Rectangle target) {
		super(target);
		if(target!=null){
			this.width = target.width;
			this.height = target.height;
		}
	}

	@Override
	public Shape clone() {
		return new Rectangle(this);
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		if (!super.equals(o)) return false;
		Rectangle rectangle = (Rectangle) o;
		return width == rectangle.width &&
				height == rectangle.height;
	}

	@Override
	public int hashCode() {
		return Objects.hash(super.hashCode(), width, height);
	}
}
